package ar.edu.utn.frba.tacs.grupo04.CarpielaCarpeta.Usuarios;


import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


import org.hibernate.Query;
import org.hibernate.classic.Session;

import ar.edu.utn.frba.tacs.grupo04.CarpielaCarpeta.Persistencia.ManagerPersistencia;



public class UsuarioDAOImp  implements UsuarioDAO{

	private static UsuarioDAOImp Instance ;
	public static UsuarioDAOImp getInstance() {
		if (Instance == null)
		{
			Instance = new UsuarioDAOImp();
		}
		return Instance;
	}

	
	
	public  Usuario getByNombre(String nombre) {
		// vuelvo a conectarme para comprobar los cambios
		Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();
		session.beginTransaction();

		Query query = session
				.createQuery("from Usuario u where u.Nombre= :Nombre");
		query.setParameter("Nombre",nombre);
		java.util.List list = query.list();
		return(Usuario) list.iterator().next();
	}

	public  Object getById(int id) {
		// vuelvo a conectarme para comprobar los cambios
		
		Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();
		session.beginTransaction();

		Query query = session.createQuery("from Usuario u where u.id= :ID");
		query.setParameter("ID",id);
		java.util.List list = query.list();
		session.flush();
		return list.iterator().next();
	}
	public void addNew (Object object) {
		Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save((Usuario)object);

		session.flush();
		session.getTransaction().commit();
		
	}
	
	public void addAll(ArrayList<Usuario> usuariosFromXML) {
		for(Usuario u: usuariosFromXML)
		{
			addNew(u);
		}
		
	}
	
	public Collection<Usuario> getAll() {
	
		Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();

		session.beginTransaction();

		Query query = session.createQuery("from Usuario u");
		List list = query.list();
		
		Collection<Usuario> usuarios = new ArrayList<Usuario>();
		usuarios.addAll(list);
		session.flush();	
		return usuarios;
		
	}

	public Usuario getLoginUser(String email, String password) {
	
			Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();
			
			session.beginTransaction();
			//u.Password= :Password and 
			Query query = session.createQuery("from Usuario u where u.Password= :Password and  u.Email = :Email");
			
			query.setParameter("Password",password);
			query.setParameter("Email",email);
			
			
			List list = query.list();
			return (Usuario) list.iterator().next();
			
	}


	public void UpdateUsuario(Usuario user) {
		
			Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();
			session.beginTransaction();
			
			session.saveOrUpdate(user);

			session.flush();
			session.getTransaction().commit();
			
		}


	public boolean userExists(Usuario user) {
		Session session = ManagerPersistencia.getInstance().getSessionFactory().getCurrentSession();
		session.beginTransaction();

		Query query = session.createQuery("from Usuario u where u.Email = :Email");
		query.setParameter("Email",user.getEmail());
		
		
		List list = query.list();
		return list.size() > 0 ;
		
	}
		
}
	

